package cn.songjhh.project.controller; import cn.songjhh.project.po.user.User; import cn.songjhh.project.po.user.UserCustom; import cn.songjhh.project.service.UserService; import cn.songjhh.project.util.CryptographyUtil; import org.apache.commons.logging.Log; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresGuest; import org.apache.shiro.authz.annotation.RequiresUser; import org.apache.shiro.session.Session; import org.apache.shiro.session.mgt.eis.AbstractSessionDAO; import org.apache.shiro.session.mgt.eis.SessionDAO; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.validation.Valid; import java.util.Date; import java.util.List; /** * Created by song9 on 2016/12/29. */ @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; //跳转登录页面 @RequestMapping(value = "/login",method = RequestMethod.GET) public String loginView() { return "user/login"; } //跳转注册页面 @RequestMapping(value = "/register",method = RequestMethod.GET) public String registerView() { return "user/register"; } //跳转设置页面 @RequestMapping(value = "/setting/{user_name}") public String setting(@PathVariable("user_name") String user_name, Model model) { if(user_name.equals(SecurityUtils.getSubject().getPrincipal())) { UserCustom userCustom = userService.getByUserName(user_name); model.addAttribute("user", userCustom); return "user/setting"; } else { return "redirect:/user/setting/" + SecurityUtils.getSubject().getPrincipal(); } } //登录账号 @RequestMapping(value = "/login",method = RequestMethod.POST) public String login(UserCustom userCustom, Model model) { Subject subject = SecurityUtils.getSubject(); if(!subject.isAuthenticated()) { UsernamePasswordToken token = new UsernamePasswordToken(userCustom.getUsername(), userCustom.getPassword()); token.setRememberMe(true); try { subject.login(token); Session session = subject.getSession(); userService.updateLoginLastTime(userService.getByUserName(userCustom.getUsername()),session); return "redirect:/"; } catch (UnknownAccountException uae) { model.addAttribute("errorMsg", "username wasn't in the system."); } catch (IncorrectCredentialsException ice){ model.addAttribute("errorMsg", "password didn't match."); } catch (LockedAccountException lae) { model.addAttribute("errorMsg", "account for that username is locked - can't login."); } catch (ExcessiveAttemptsException eae) { model.addAttribute("errorMsg", "password lost miss too much,please try again later."); } catch (AuthenticationException ae) { model.addAttribute("errorMsg", "unexpected condition."); } model.addAttribute("userCustom", userCustom); return "user/login"; } return "redirect:/"; } //登出账号 @RequestMapping(value = "/logout",method = RequestMethod.GET) public String logout() { Subject subject = SecurityUtils.getSubject(); Session session = subject.getSession(); if (subject.isAuthenticated()) { System.out.println(session.getLastAccessTime()); subject.logout(); } else if(subject.isRemembered()) { subject.logout(); } return "redirect:/"; } //注册账号 @RequestMapping(value = "/register",method = RequestMethod.POST) public String register(Model model, @Valid UserCustom userCustom, BindingResult bindingResult) { if(bindingResult.hasErrors()) { List<ObjectError> allErrors = bindingResult.getAllErrors(); for(ObjectError objectError:allErrors) { //输出错误信息 System.out.println(objectError.getDefaultMessage()); } model.addAttribute("allErrors", allErrors); model.addAttribute("user", userCustom); return "/user/register"; } if (userService.getByUserName(userCustom.getUsername()) == null) { userService.insertUser(userCustom); userService.giveRole(userCustom,3);//3为普通用户 待改善 return "redirect:/"; } else { model.addAttribute("user", userCustom); model.addAttribute("errormessage", "userName has been registered!"); return "/user/register"; } } //更新账号信息 @RequestMapping(value = "/update") public String update(Integer id,Model model,UserCustom userCustom) { userService.updateUser(id,userCustom);//更新用户信息 return "redirect:/"; } }